// pages/feedback/anonymous/index.js
import http from '../../utils/request'
import eventBus from '../../utils/eventBus'

Page({
    data: {
        banners: [], // 轮播图数据
        feedbacks: [], // 吐槽列表
        page: 1, // 当前页码
        size: 10, // 每页数量
        loading: false, // 加载状态
        noMore: false // 是否无更多数据
    },

    onLoad() {
        // [功能屏蔽开始] 因类目问题临时添加的提示框
        wx.showModal({
            title: '功能暂不可用',
            content: '由于平台类目调整，该功能暂时封闭，待更新类目后重新开放。',
            confirmText: '确定',
            showCancel: false, // 不显示取消按钮
            success: (res) => {
                if (res.confirm) {
                    // 返回上一页（如果是从首页进入则返回首页）
                    const pages = getCurrentPages();
                    if (pages.length > 1) {
                        wx.navigateBack({ delta: 1 });
                    } else {
                        wx.switchTab({ url: '/pages/home/home' });
                    }
                }
            }
        });
        return; // 直接返回不执行后续初始化逻辑
        // [功能屏蔽结束]

        
        // 绑定事件监听（需要保持this指向）
        this._bindEventListeners()

        this.loadBanners()
        this.loadFeedbacks()
    },

    onUnload() {
        // 移除事件监听
        eventBus.off('feedback-updated', this._handleFeedbackUpdate)
    },

    onShow() {
        console.log('[TRACE] 页面显示');
        this.checkLoginStatus();
    },

    // 新增方法：绑定事件监听器
    _bindEventListeners() {
      // 使用箭头函数保持this指向
      this._handleFeedbackUpdate = () => {
        console.log('[EVENT] 收到反馈更新事件')
        this._refreshFeedbacks()
      }
      
      // 注册事件监听
      eventBus.on('feedback-updated', this._handleFeedbackUpdate)
    },
  
    // 新增方法：强制刷新吐槽列表
    _refreshFeedbacks() {
      this.setData({
        page: 1,         // 重置页码
        noMore: false,   // 重置加载状态
        feedbacks: []    // 清空旧数据
      }, () => {
        this.loadFeedbacks() // 在回调中重新加载
      })
    },

    // ====================== 新增跳转方法 ====================== 
    navigateToPost() {
        wx.navigateTo({
            url: '/pages/feedbackpostcard/postcard'
        })
    },

    // ====================== 登录状态检查 ======================  
    checkLoginStatus() {
        try {
            const userInfo = wx.getStorageSync('userInfo');

            // 新增用户名读取逻辑
            const userName = userInfo.name || '未知用户'; // 添加默认值

            if (!userInfo?.employee_number) {
                this.showLoginAlert();
                return;
            }

        } catch (error) {
            console.error('存储读取失败:', error);
            this.showLoginAlert();
        }
    },

    showLoginAlert() {
        wx.showModal({
          title: '未登录',
          content: '请先登录后再使用该功能',
          confirmText: '去登录',
          cancelText: '返回首页', // 明确提示取消操作的含义
          success: (res) => {
            if (res.confirm) {
              wx.reLaunch({ url: '/pages/user/user' });
            } else if (res.cancel) {
              // 增加页面堆栈判断防止报错
              if (getCurrentPages().length > 1) {
                wx.navigateBack({ delta: 1 }); // 返回上一页
              } else {
                wx.reLaunch({ url: '/pages/home/home' }); // 无上一页时回首页
              }
            }
          },
          fail: (err) => {
            console.error('弹窗调用失败:', err);
          }
        });
      },

    // 加载轮播图
    async loadBanners() {
        try {
            const res = await http.get('/banners')
            this.setData({
                banners: res.data.banners
            })
        } catch (err) {
            this.showErrorToast('轮播图加载失败')
        }
    },

    // 加载吐槽列表
    async loadFeedbacks() {
        if (this.data.noMore || this.data.loading) return

        this.setData({
            loading: true
        })

        try {
            const params = {
                page: this.data.page,
                size: this.data.size
            }

            const res = await http.get('/feedbacks', params, {
                needLoading: false // 禁用全局loading
            })

            this.setData({
                feedbacks: [...this.data.feedbacks, ...res.data.feedbacks],
                page: this.data.page + 1,
                loading: false,
                noMore: res.data.feedbacks.length < this.data.size
            })
        } catch (err) {
            this.setData({
                loading: false
            })
            this.showErrorToast('列表加载失败')
        }
    },

    // 加载更多
    loadMore() {
        // 增加多重校验条件
        if (this.data.loading || this.data.noMore || !this.data.feedbacks.length) return
        this.loadFeedbacks()
    },

    // 点赞/取消点赞
    async toggleLike(e) {
        const id = e.currentTarget.dataset.id
        const feedback = this.data.feedbacks.find(item => item.id === id)

        try {
            const res = await http.post(
                `/feedback/${id}/like`, {
                    action: feedback.is_liked ? 'remove' : 'add'
                }, {
                    needLoading: false
                }
            )

            const updatedFeedbacks = this.data.feedbacks.map(item => {
                if (item.id === id) {
                    return {
                        ...item,
                        is_liked: !item.is_liked,
                        like_count: res.like_count
                    }
                }
                return item
            })

            this.setData({
                feedbacks: updatedFeedbacks
            })
        } catch (err) {
            this.showErrorToast('操作失败')
        }
    },

    // 删除确认
    showDeleteDialog(e) {
        const id = e.currentTarget.dataset.id
        wx.showModal({
            title: '确认删除',
            content: '删除后不可恢复',
            success: (res) => {
                if (res.confirm) {
                    this.deleteFeedback(id)
                }
            }
        })
    },

    // 执行删除
    async deleteFeedback(id) {
        try {
            await http.delete(`/feedback/${id}`, {}, {
                needLoading: true
            })

            const updatedFeedbacks = this.data.feedbacks.filter(item => item.id !== id)
            this.setData({
                feedbacks: updatedFeedbacks
            })
            wx.showToast({
                title: '删除成功'
            })
        } catch (err) {
            this.showErrorToast('删除失败')
        }
    },

    // 统一错误处理
    showErrorToast(msg) {
        wx.showToast({
            title: msg,
            icon: 'none',
            duration: 2000
        })
    }
})